package com.huifaapp.mall.uitils;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;

import com.alipay.sdk.app.PayTask;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.huifaapp.mall.activity.AlreadyPayActivity;
import com.huifaapp.mall.activity.DetailsofPaymentActivity;
import com.huifaapp.mall.activity.WaitPayActivity;
import com.huifaapp.mall.afinal.JSConstants;
import com.huifaapp.mall.api.ApiManager;
import com.huifaapp.mall.api.ObserverCallback;
import com.huifaapp.mall.bean.MessageEvent;
import com.huifaapp.mall.bean.SignatureBean;
import com.huifaapp.mall.wxapi.WXPayEntryActivity;

import org.greenrobot.eventbus.EventBus;

import java.util.Map;


/**
 * 支付宝工具类
 *
 * @author lijs
 */
public class AlipayUtils {
    private static final int SDK_PAY_FLAG = 1;
    private Context context;
//    private Handler mHandler = new Handler() {
//        @SuppressWarnings("unused")
//        public void handleMessage(Message msg) {
//            switch (msg.what) {
//                case SDK_PAY_FLAG: {
//                    PayResult payResult = new PayResult((String) msg.obj);
//                    String resultInfo = payResult.getResult();// 同步返回需要验证的信息
//                    String resultStatus = payResult.getResultStatus();
//                    // 判断resultStatus 为“9000”则代表支付成功，具体状态码代表含义可参考接口文档
//                    if (TextUtils.equals(resultStatus, "9000")) {
//                        Toast.makeText(context, "支付成功", Toast.LENGTH_SHORT).show();
//                        EventBus.getDefault().post(new FirstEvent());
//                    } else {
//                        // 判断resultStatus 为非"9000"则代表可能支付失败
//                        // "8000"代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认，最终交易是否成功以服务端异步通知为准（小概率状态）
//                        if (TextUtils.equals(resultStatus, "8000")) {
//                            Toast.makeText(context, "支付结果确认中", Toast.LENGTH_SHORT).show();
//                        } else {
//                            Toast.makeText(context, "支付失败", Toast.LENGTH_SHORT).show();
//                            // 其他值就可以判断为支付失败，包括用户主动取消支付，或者系统返回的错误
//                        }
//                    }
//                    break;
//                }
//                default:
//                    break;
//            }
//        }
//
//        ;
//    };


    @SuppressLint("HandlerLeak")
    private Handler mHandler = new Handler() {
        @SuppressWarnings("unused")
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case SDK_PAY_FLAG: {
                    @SuppressWarnings("unchecked")
                    PayResult payResult = new PayResult((Map<String, String>) msg.obj);
                    /**
                     对于支付结果，请商户依赖服务端的异步通知结果。同步通知结果，仅作为支付结束的通知。
                     */
                    String resultInfo = payResult.getResult();// 同步返回需要验证的信息
                    String resultStatus = payResult.getResultStatus();
                    // 判断resultStatus 为9000则代表支付成功
                    if (TextUtils.equals(resultStatus, "9000")) {
                        Toast.makeText(context, "支付成功", Toast.LENGTH_SHORT).show();
                        Intent intent=new Intent(context, AlreadyPayActivity.class);
                        intent.putExtra("orderNo",Contig.orderNo);
                        context.startActivity(intent);
                        EventBus.getDefault().post(new MessageEvent().setMesg(ApiManager.BASE_HTML_URL+ JSConstants.HTML_PAY_SUCCEDD));
//                        ToastUtils.showShortSafe("支付宝支付成功");
                        switch (msg.arg1) {

//                            case Constant.PAY_VIP://会员支付
//                                EventBus.getDefault().post(new FirstEvent().setCode(Constant.PAY_VIP_RESULT_SUCCED).setMsg("会员支付成功"));
//                                break;
//                            case Constant.PAY_ORDER://订单支付
//                                EventBus.getDefault().post(new FirstEvent().setCode(Constant.PAY_ORDER_RESULT_SUCCED).setMsg("订单支付成功"));
//                                break;

                        }
                        // 该笔订单是否真实支付成功，需要依赖服务端的异步通知。

                    } else {
                        // 该笔订单真实的支付结果，需要依赖服务端的异步通知。
                        Toast.makeText(context, "支付失败", Toast.LENGTH_SHORT).show();
                        Intent insb=new Intent(context,WaitPayActivity.class);
                        Log.e("orderNoorderNo", DetailsofPaymentActivity.orderNo+"         "+Contig.orderNo);
                        insb.putExtra("orderNo", Contig.orderNo);
                        context.startActivity(insb);
                        switch (msg.arg1) {
//                            case Constant.PAY_VIP://会员支付
//                                EventBus.getDefault().post(new FirstEvent().setCode(Constant.PAY_VIP_RESULT_FAILURE).setMsg("会员支付失败"));
//                                break;
//                            case Constant.PAY_ORDER://订单支付
//                                EventBus.getDefault().post(new FirstEvent().setCode(Constant.PAY_ORDER_RESULT_FAILURE).setMsg("订单支付成功"));
//                                break;

                        }
                    }
                    break;
                }

                default:
                    break;
            }
        }

        ;
    };

    /**
     * 支付宝
     *
     * @param context
     */
    public AlipayUtils(Context context) {
        this.context = context;
//        AlipaySignature(ryid, money, type);

    }

//	private void queryPay(final Context context, final String ryid, final String money, final String type) {
//		XUtil.Post(HttpRequestParams.countOfNoPay(ryid),new MyCallBack<String>(context){
//			@Override
//			public void onSuccess(String result) {
//				super.onSuccess(result);
//				String count = XUtil.getJson(context, result);
//				if(Integer.parseInt(count)!=0) {
//				    ToastUtils.showShort(context,"您还有未完成的订单，请稍后");
//				}else {
//					AlipaySignature(ryid, money,type);
//				}
//			}
//			@Override
//			public void onError(Throwable ex, boolean isOnCallback) {
//				super.onError(ex, isOnCallback);
//				ToastUtils.showShort(context,"支付失败");
//			}
//		});
//	}

    /**
     * create the order info. 创建订单信息
     */

    private String getOrderInfo(SignatureBean result) {
        // 参数编码， 固定值
        String orderInfo = "_input_charset=\"utf-8\"";
        // 商品详情
        orderInfo += "&body=" + "\"" + result.getBody() + "\"";
        // 设置未付款交易的超时时间
        orderInfo += "&it_b_pay=\"30m\"";
        // 服务器异步通知页面路径
        orderInfo += "&notify_url=" + "\"" + result.getNotify_url() + "\"";
        // 商户网站唯一订单号
        orderInfo += "&out_trade_no=" + "\"" + result.getOut_trade_no() + "\"";
        // 签约合作者身份ID
        orderInfo += "&partner=" + "\"" + result.getPartner() + "\"";
        // 支付类型， 固定值
        orderInfo += "&payment_type=\"" + result.getPayment_type() + "\"";
        // 签约卖家支付宝账号
        orderInfo += "&seller_id=" + "\"" + result.getSeller_id() + "\"";
        // 服务接口名称， 固定值
        orderInfo += "&service=\"mobile.securitypay.pay\"";
        // 商品名称
        orderInfo += "&subject=" + "\"" + result.getSubject() + "\"";
        // 商品金额
        orderInfo += "&total_fee=" + "\"" + result.getTotal_fee() + "\"";
        return orderInfo;
    }

    private String getSignType() {
        return "sign_type=\"RSA\"";
    }


    /**
     * 支付宝签名
     */
    String payInfo = null;

    @SuppressWarnings("unused")
    public void getAlipaySignature(String orderNo,String token,String appId) {

        Log.e("数据","?orderNo="+orderNo+"&token="+token+"&appId="+appId);

//        String token=SPUtils.getInstance().getString(SPConstants.KEY_USER_TOKEN);
        ApiManager.getInstance()
                .getApiServer()
                .getAlipaySigns(orderNo,token,appId)
                .compose(ApiManager.<String>handlResult())
                .subscribe(new ObserverCallback<String>(context) {
                    @Override
                    protected void onSuccessful(String resp) {
                        Log.e("数据","payInfo="+resp);
                        payInfo = resp;
                        Log.e("数据","payInfo="+payInfo);
                        Runnable payRunnable = new Runnable() {
                            @Override
                            public void run() {
                                // 构造PayTask 对象
                                PayTask alipay = new PayTask((Activity) context);
                                // 调用支付接口，获取支付结果
                                Map<String, String> result = alipay.payV2(payInfo, true);
                                LogUtils.e("TAG", "支付宝支付结果" + result.toString());
                                Log.i("msp", result.toString());

                                Message msg = new Message();
                                msg.what = SDK_PAY_FLAG;
                                msg.obj = result;
                                //支付会员
//                                msg.arg1 = Constant.PAY_VIP;
                                mHandler.sendMessage(msg);
                            }
                        };

                        // 必须异步调用
                        Thread payThread = new Thread(payRunnable);
                        payThread.start();
                    }

                    @Override
                    protected void onError(String code, String errMsg) {
                        ToastUtils.showShortSafe(errMsg);
                    }
                });


//        XUtil.Post(HttpRequestParams.ZhiFu(ryid, money, type), new MyCallBack<String>(context) {
//            @Override
//            public void onSuccess(String result) {
//                if (result != null) {
//                    try {
//                        JSONObject object = new JSONObject(result);
//                        String code = object.optString("code");
//                        if ("40000".equals(code)) {
//                            String resobj = object.optString("resobj");
//                            JSONObject object2 = new JSONObject(resobj);
//                            payInfo = object2.optString("orderString");
//                            Runnable payRunnable = new Runnable() {
//                                @Override
//                                public void run() {
//                                    // 构造PayTask 对象
//                                    PayTask alipay = new PayTask((Activity) context);
//                                    // 调用支付接口，获取支付结果
//                                    Map<String, String> result = alipay.payV2(payInfo, true);
//                                    LogUtils.e("TAG", "支付宝支付结果" + result.toString());
//                                    Log.i("msp", result.toString());
//
//                                    Message msg = new Message();
//                                    msg.what = SDK_PAY_FLAG;
//                                    msg.obj = result;
//                                    //支付会员
//                                    msg.arg1 = Constant.PAY_VIP;
//                                    mHandler.sendMessage(msg);
//                                }
//                            };
//
//                            // 必须异步调用
//                            Thread payThread = new Thread(payRunnable);
//                            payThread.start();
//                        } else if ("50000".equals(code)) {
//                            ToastUtils.showShort(context,"订单已进入其他流程不能取消");
//
//                        }else if ("60001".equals(code)) {
//                            ToastUtils.showShort(context,"订单已进入其他流程不能支付");
//                        }else if ("60002".equals(code)) {
//                            ToastUtils.showShort(context,"订单异常,暂时不能支付");
//                        }
//
//
//                    } catch (JSONException e) {
//                        e.printStackTrace();
//                    }
//
//
//
//                }
//            }
//        });
    }

    /**
     * 获取商城支付宝签名
     *
     * @param uid     用户ID
     * @param orderno 订单ID
     */
//    public void mallAlipaySignature(String uid, String orderno) {
//        XUtil.Post(HttpRequestParams.mallAlipaySignature(uid, orderno), new MyCallBack<String>(context) {
//            @Override
//            public void onSuccess(String result) {
//                if (result != null) {
//
//                    try {
//                        JSONObject object = new JSONObject(result);
//                        String code = object.optString("code");
//                        if ("40000".equals(code)) {
//                            String resobj = object.optString("resobj");
//                            JSONObject object2 = new JSONObject(resobj);
//                            payInfo = object2.optString("orderString");
//                            Runnable payRunnable = new Runnable() {
//                                @Override
//                                public void run() {
//                                    // 构造PayTask 对象
//                                    PayTask alipay = new PayTask((Activity) context);
//                                    // 调用支付接口，获取支付结果
//                                    Map<String, String> result = alipay.payV2(payInfo, true);
//                                    LogUtil.e("TAG", "支付宝支付结果" + result.toString());
//                                    Log.i("msp", result.toString());
//
//                                    Message msg = new Message();
//                                    msg.what = SDK_PAY_FLAG;
//                                    msg.obj = result;
//                                    //支付会员
//                                    msg.arg1 = Constant.PAY_ORDER;
//                                    mHandler.sendMessage(msg);
//                                }
//                            };
//
//                            // 必须异步调用
//                            Thread payThread = new Thread(payRunnable);
//                            payThread.start();
//                        } else if ("50000".equals(code)) {
//                            ToastUtils.showShort(context,"订单已进入其他流程不能取消");
//
//                        }else if ("60001".equals(code)) {
//                            ToastUtils.showShort(context,"订单已进入其他流程不能支付");
//                        }else if ("60002".equals(code)) {
//                            ToastUtils.showShort(context,"订单异常,暂时不能支付");
//                        }
//
//
//                    } catch (JSONException e) {
//                        e.printStackTrace();
//                    }
//
//                }
//            }
//        });
//    }
//		RequestParams params=new RequestParams(Constants.HTTP_URL+"appaipaymobile/qianming.ph");
//		params.addBodyParameter("uid", LuoHeadVertAppApplication.getInstance().getUid());// 用户ID
//		params.addBodyParameter("cid", orderid);// 商品ID
//		params.addBodyParameter("type", type);// 1积分商品,2分销商品
//		params.addBodyParameter("integral", jifen);// 积分
//		params.addBodyParameter("yongjin", yongjin);// 佣金
//		x.http().post(params, new CommonCallback<String>() {
//
//			@Override
//			public void onCancelled(CancelledException arg0) {
//				// TODO Auto-generated method stub
//				
//			}
//
//			@Override
//			public void onError(Throwable arg0, boolean arg1) {
//				// TODO Auto-generated method stub
//				
//			}
//
//			@Override
//			public void onFinished() {
//				// TODO Auto-generated method stub
//				
//			}

//			@Override
//			public void onSuccess(String arg0) {
//				ResBean resBean=FastJsonUtils.getPerson(arg0,ResBean.class);
//				if(resBean!=null){
//					if(resBean.getCode().equals("40000")){
//						AlipayBean alipayBean=new Gson().fromJson(resBean.getResobj(), AlipayBean.class);
//						if(alipayBean!=null){
//							String orderInfo = getOrderInfo(alipayBean);
//							String sign = null;
//							try {
//								/**
//								 * 仅需对sign 做URL编码
//								 */
//								sign = URLEncoder.encode(alipayBean.getSign(), "UTF-8");
//							} catch (UnsupportedEncodingException e) {
//								e.printStackTrace();
//							}
//							/**
//							 * 完整的符合支付宝参数规范的订单信息
//							 */
//							final String payInfo = orderInfo + "&sign=\"" + sign + "\"&" + getSignType();
//
//							Runnable payRunnable = new Runnable() {
//		
//								@Override
//								public void run() {
//									// 构造PayTask 对象
//									PayTask alipay = new PayTask((Activity) context);
//									// 调用支付接口，获取支付结果
//									String result = alipay.pay(payInfo, true);
//		
//									Message msg = new Message();
//									msg.what = SDK_PAY_FLAG;
//									msg.obj = result;
//									mHandler.sendMessage(msg);
//								}
//							};
//		
//							// 必须异步调用
//							Thread payThread = new Thread(payRunnable);
//							payThread.start();
//						}
//						
//					}else{
////						System.out.println("null");
//					}
//				}else{
////					System.out.println("null");
//				}
//			}
//		});


}
